/* Original Author:  Dominick O'Dierno
 * Date: 2007   odiernod@gmail.com     --Originally intended for use with DOMercury:  http://www.odierno.com/domercury
 * Description: Defines the IAction Interface
 * 
 * --CHANGELOG--
 * Date         email                       Description  
 * 4/4/2008     odiernod@gmail.com          Changed the bool on Perform to return whther the current index should be set to the main DOMercury index or not
 * */

using System;
using System.Collections.Generic;
using System.Text;

namespace DOMercury.Interfaces
{
    /// <summary>
    /// This is the interface that all actions must implement
    /// </summary>
    public interface IAction
    {
        /// <summary>
        /// The type (name) of the action.  This is displayed to the user in the Action Pane
        /// </summary>
        string ActionType
        {
            get;
        }
        /// <summary>
        /// The Action Discription.  It is displayed to the user in the Action Pane
        /// </summary>
        string Description
        {
            get;
        }
        /// <summary>
        /// Description of the Parameters this action takes.  Displayed to the user in the Parameters Pane. if not used, use "Unused"
        /// </summary>
        string ParamDescription
        {
            get;
        }
        /// <summary>
        /// The Parameter Type, should be unique to your plugin.  If not used, use "Unused"
        /// </summary>
        string ParameterType
        {
            get;
        }

        /// <summary>
        /// This is where the action actually performs its action on the item, using given parameters
        /// </summary>
        /// <param name="item">The item which this action is being performed on.  It needs to be cast to the proper item type.</param>
        /// <param name="specialParams">The parameters to be used with the action.  It needs to be cast to whatever type your action needs.</param>
        /// <returns>bool telling DOMercury whether to return the current Index to the Main Index or not</returns>
        bool Perform(IItem item, object specialParams);
        
    }
}
